// Copyright (C) Kumo inc. and its affiliates.
// Author: Jeff.li lijippy@163.com
// All rights reserved.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//

#pragma once

namespace nebula {

#define NEBULA_GENERATE_FOR_ALL_INTEGER_TYPES(ACTION) \
      ACTION(Int8);                                      \
      ACTION(UInt8);                                     \
      ACTION(Int16);                                     \
      ACTION(UInt16);                                    \
      ACTION(Int32);                                     \
      ACTION(UInt32);                                    \
      ACTION(Int64);                                     \
      ACTION(UInt64)

#define NEBULA_GENERATE_FOR_ALL_NUMERIC_TYPES(ACTION) \
      NEBULA_GENERATE_FOR_ALL_INTEGER_TYPES(ACTION);      \
      ACTION(Fp16);                                 \
      ACTION(Fp32);                                     \
      ACTION(Fp64)

#define NEBULA_GENERATE_FOR_ALL_TYPES(ACTION)    \
      ACTION(Null);                                 \
      ACTION(Boolean);                              \
      NEBULA_GENERATE_FOR_ALL_NUMERIC_TYPES(ACTION); \
      ACTION(String);                               \
      ACTION(StringView);                           \
      ACTION(Binary);                               \
      ACTION(BinaryView);                           \
      ACTION(LargeString);                          \
      ACTION(LargeBinary);                          \
      ACTION(FixedSizeBinary);                      \
      ACTION(Duration);                             \
      ACTION(Date32);                               \
      ACTION(Date64);                               \
      ACTION(Timestamp);                            \
      ACTION(Time32);                               \
      ACTION(Time64);                               \
      ACTION(MonthDayNanoInterval);                 \
      ACTION(MonthInterval);                        \
      ACTION(DayTimeInterval);                      \
      ACTION(Decimal128);                           \
      ACTION(Decimal256);                           \
      ACTION(List);                                 \
      ACTION(LargeList);                            \
      ACTION(ListView);                             \
      ACTION(LargeListView);                        \
      ACTION(Map);                                  \
      ACTION(FixedSizeList);                        \
      ACTION(Struct);                               \
      ACTION(SparseUnion);                          \
      ACTION(DenseUnion);                           \
      ACTION(Dictionary);                           \
      ACTION(RunEndEncoded);                        \
      ACTION(Extension)

}  // namespace nebula
